﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//main156&157&158：按块二进制读写
int main156()
{
	//char arr[16] = "hello world";
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//0000 0001
	//1.参数wb，表示二进制写；
	FILE* fp = fopen("../../../file/BlockReadWrite.txt", "wb");
	if (!fp)
	{
		return -1;
	}
	//2.arr的有效字符只有11个，如果读取16个的话，会多写入5个空格。sizeof(char)是读取1个字节，11是读取11块。就是
		//按块读写，读取11块，每块1个字节。
	//fwrite(arr, sizeof(char), 11, fp);//hello world 
	//3.读取10块，每块4个字节，总共读取了40个字节；
	fwrite(&arr, sizeof(int), 10, fp);//        		反正是二进制存储，也看不懂；

	fclose(fp);

	system("pause");
	return EXIT_SUCCESS;
}
int main157(void)
{
	FILE* fp = fopen("../../../file/BlockReadWriteTxt.txt", "wb");
	if (!fp)
	{
		return -1;
	}
	//fprintf(fp, "1,2,3,4,5,6,7,8,9,10");//1,2,3,4,5,6,7,8,9,10  此时为20个字节；
	//int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//0000 0001
	int arr[] = { 888888,888888,888888,888888,5,6,7,8,9,10 };
	//4.还是一堆乱码，此时为16个字节；-->8    乱码。用二进制文本存储，每个数字只要在int中，都按照4个字节存储；
		//读取4块，每块4个字节。无论数组多大，都只会读取16个字节；
	fwrite(&arr, sizeof(int), 4, fp);//    <-->   888888,888888,888888,888888

	fclose(fp);
	return 0;
}
int main158(void)
{
	FILE* fp = fopen("../../../file/BlockReadWriteTxt.txt", "rb");
	if (!fp)
	{
		return -1;
	}
	int arr[10] = { 0 };
	//fread(arr, 1, 16, fp);
	//6.读取二进制文件BlockReadWriteTxt.txt中所有的内容；
	int i = 0;
	while (!feof(fp))
	{
		fread(&arr[i++], sizeof(int), 1, fp);
	}

	fclose(fp);

	for (int i = 0; i < 10; i++)//4-->10
	{
		printf("5.读取二进制文件BlockReadWriteTxt.txt的内容，并输出：%d\n", arr[i]);//888888 888888 888888 888888 0 0 0 0 0 0
	}

	return 0;
}